package com.nyist.waitAndNotify;

import com.nyist.thread.NyistThreadUtils;

/**
 * 1.
 *
 * @ClassName ProducerThread
 * @Description
 * @Author xiaoyang
 * @Date 2023/04/09/11:05
 */
public class ProducerThread extends Thread{

    @Override
    public void run() {
        // 1. 先写循环
        while (true) {
            // 多线程时可能存在问题的代码块, 需要加锁的代码块
            synchronized (WaitNotifyThread.lock) {
                // 2. 再写结束条件
                if (WaitNotifyThread.total == 0) {
                    break;
                }
                // 3. 判断状态
                if (WaitNotifyThread.status == 0) {
                    // 等于 0 的时候生产者 生产
                    // WaitNotifyThread.total--;
                    System.out.println("=====>>>producer"+ NyistThreadUtils.getThreadName() + " start <<<=====");
                    // 生产完毕将 状态置位 已生产 1
                    WaitNotifyThread.status = 1;
                    // 唤醒所有消费者
                    WaitNotifyThread.lock.notifyAll();

                } else if (WaitNotifyThread.status == 1) {
                    // 生产者等待
                    // 当前线程的等待
                    try {
                        WaitNotifyThread.lock.wait();
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                } else {
                    System.out.println("====>>>>other status<<<======");
                }

            }
        }
    }
}
